# coding utf-8

''''''
"""
根据制定的规则循环生成数据，当条件不成立时则生成数据结束。
数据不是一次性全部生成出来，而是使用一个，再生成一个，可以节约大量的内存。
"""

# 创建生成器(推导式)
_generator = (i * 2 for i in range(5))
print(_generator)
# next获取生成器下一个值
value = next(_generator)
value2 = next(_generator)
print('第一个值', value)
print('第二个值', value2)

print('===' * 10)

_generator2 = (i * 2 for i in range(5))
# 遍历生成器
for value in _generator2:
    print(value)
print('===' * 10)


'''斐波那契数列'''
def fibonacci(num):
    a = 0
    b = 1

    # 记录生成fibonacci数字的下标
    current_index = 0

    while current_index < num:
        result = a
        a, b = b, a + b
        current_index += 1
        # 代码执行到yield会暂停，然后把结果返回出去，下次启动生成器会在暂停的位置继续往下执行
        yield result


fib = fibonacci(7)
print(fib)
# 遍历生成的数据
for value in fib:
    print(value)
